package dao

import "gitee.com/captials-team/ubdframe/src/domain/interfaces"

type SplitTableDaoHelp struct {
	Model       interfaces.ItfSplitTableModel
	TablePrefix string `json:"table_prefix"` //表前缀

	f1 func(int64) string  //按id分表的具体策略函数
	f2 func(string) string //按key分表的具体策略函数
}

func (h *SplitTableDaoHelp) SplitTable(id int64, key string) string {
	splitKey := ""
	if h.f1 != nil && id > 0 {
		splitKey = h.f1(id)
	} else if h.f2 != nil && len(key) > 0 {
		splitKey = h.f2(key)
	} else if len(key) > 0 {
		splitKey = key
	}
	if splitKey == "" {
		return h.TablePrefix + h.Model.TableName()
	}

	return h.TablePrefix + h.Model.SplitTableName(splitKey)
}

func (h *SplitTableDaoHelp) SetSplitStrategyById(f1 func(int64) string) {
	h.f1 = f1
}

func (h *SplitTableDaoHelp) SetSplitStrategyByKey(f2 func(string) string) {
	h.f2 = f2
}
